<?php

require_once(dirname(__FILE__).'/bICmd.iface.php');
require_once(dirname(__FILE__).'/../core/bError.class.php');


/**
 * bCmdlineParser
 *
 * Parseur pour les commandes en consoles
 *
 * @package bottleneck
 * @subpackage scripts
 * @author Thomas Lenoel
 * @copyright 2010 Thomas Lenoel
 * @version 0.1
 * @license http://www.gnu.org/licenses/gpl.html GNU General Public License version 3
 */
class bCmdlineParser {

    /**
     * Tableau des paramètres passés en argument
     *
     * @var array
     */
    private $_params;

    /**
     * Nom de la commande à exécuter
     *
     * @var string
     */
    private $_command;

    /**
     * Nom du projet sur lequel on travaille
     *
     * @var string
     */
    private $_appname;

    /**
     * Arguments de la commande a exécuter
     *
     * @var array
     */
    private $_args;

    /**
     * Initialise les paramètres
     *
     * @param array $params
     */
    public function __construct($params) {
        $this->_params = $params;
    }

    /**
     * Instancie et exécute la commande
     *
     * @return boolean
     */
    public function getCmd() {

        $firstArg = 0;
        
        if (substr_compare('--', $this->_params[1], 0, 2) == 0) {
            $this->_appname = substr($this->_params[1], 2);
            $this->_command = $this->_params[2];
            $firstArg = 3;
        } else if (isset ($_ENV['BNECK_APPNAME']) && !empty($_ENV['BNECK_APPNAME'])){
            $this->_appname = $_ENV['BNECK_APPNAME'];
            $this->_command = $this->_params[1];
            $firstArg = 2;
        } else {
            bError::appNotDefined();
        }

        if (count($this->_params) < $firstArg) bError::cmdExpected();
            
        
        for ($i = $firstArg; $i < count($this->_params); $i++) {
            $this->_args[] = $this->_params[$i];
        }

        $file = dirname(__FILE__).'/'.$this->_command.'.cmd.php';
        if (is_file($file))
            require_once($file);
        else bError::cmdNotExist();

        $c = $this->_command;
        return new $c($this->_args, $this->_appname);
    }
}

?>
